<?php

/* 27/07/2011

   En este modulo llevaran a cabo los servicio para el usuario
   que seran llamados por el servicio web (Representational State Transfer)

 -trim       = elimina espacion en blanco en la cadena a los extremos.
 -strtolower = toda la cadena a minuscula.

 */

class html_servicio_usuarioActions extends sfActions
{

public function executeIndex(sfWebRequest $request)
{

}



/*
    Este servicio sirve para verificar si el usuario y constrase単a
    son correctos.
   -El metododo "executeToken" verifica un codigo de seguridad
    para asegurarnos que el servicio lo esta una de las plataformas
    asociadas (devuelve true o false)
 */
public function executeLogin(sfWebRequest $request)
{
    //obteniedo los datos
    $email           = $request->getParameter('email');
    $password        = $request->getParameter('password');
    $token_seguridad = $request->getParameter('token');

    //verificando si el codigo es correcto
    if($this->executeToken($token_seguridad)){
        $criterio = new Criteria();
        $criterio->add(UsuarioPeer::EMAIL,    $email);
        $criterio->add(UsuarioPeer::PASSWORD, $password);
        //verificado si la el usuario y la constrase単a es correcta
        if(UsuarioPeer::doCount($criterio)>0){
            return sfView::ERROR;
        }else{
            return sfView::SUCCESS;
        }
    }else{
        return sfView::ERROR;
    }

}


public function executeActivar_usuario(sfWebRequest $request)
{
     $token_seguridad = $request->getParameter('token');
     $email = $request->getParameter('email');

}


public function executeRegistrar(sfWebRequest $request)
{

    $nombre          = $request->getParameter('nombre');
    $apellido        = $request->getParameter('apellido');
    $password        = $request->getParameter('password');
    $email           = $request->getParameter('email');
    $plataforma      = $request->getParameter('plataforma');
    $token_seguridad = $request->getParameter('token');



      if($this->executeToken($token_seguridad)){
         if($this->executeVerificar($email)){
            //si esta disponible valido datos
            $vEmail = new sfValidatorEmail(array('required'=>true));
            $vString= new sfValidatorString(array('required'=>true));

            try {
            $vEmail->clean(strtolower(trim($email)));
            } catch (sfValidatorError $exc) {
               print_r('error:password');
               return sfView::ERROR;
            }
            try {
            $vString->clean(strtolower(trim($plataforma)));
            } catch (sfValidatorError $exc) {
               print_r('error:plataforma');
               return sfView::ERROR;
            }
            try {
            $vString->clean($password);
            } catch (sfValidatorError $exc) {
               print_r('error:password');
               return sfView::ERROR;
            }


            // si no entro en los  catch
            $nuevo_usuario = new Usuario();
            $nuevo_usuario->setNombre(strtolower(trim($nombre)));
            $nuevo_usuario->setApellido(strtolower(trim($apellido)));
            $nuevo_usuario->setEmail(strtolower(trim($email)));
            $nuevo_usuario->setPassword($password);
            $nuevo_usuario->setPlataforma($plataforma);
            $nuevo_usuario->setUsuarioTipoId(1);
            //donde ["pk de la tabla flag"-"estado del flag"]
            $nuevo_usuario->setFlag("[1-1]*[2-0]*[3-1]");
            $nuevo_usuario->save();

            //el token para que pueda activar su cuenta
            $token = new TmpUsuarioRegistro();
            $token->setToken(md5(rand(100000,999999)));
            $token->setFechaActualizacion(time());
            $token->setUsuarioId($nuevo_usuario->getId());
            $token->save();
            //registro los datos
            $auditoria = new UsuarioAuditoria();
            $auditoria->setFechaRegistro(time());
            $auditoria->setFechaActualizacion(time());
            $auditoria->setUsuarioId($nuevo_usuario->getId());
            $auditoria->save();
            $this->token=$token;


            return sfView::SUCCESS;

       }else{
            print_r('error:verificar');
            return sfView::ERROR;
        }
    }else{
        print_r('error:token');
        return sfView::ERROR;
    }




}


/*
    Este servicio sirve para verificar si el usuario existe en la base
    de datos ... el metododo "executeToken" verifica un codigo de seguridad
    para asegurarnos que el servicio lo esta una de las plataformas
    asociadas (devuelve true o false)
 */
public function executeVerificar_disponibilidad(sfWebRequest $request)
{


    //obteniedo los datos
      $email           = $request->getParameter('email');
      $token_seguridad = $request->getParameter('token');

    //verificando si el codigo es correcto
    if($this->executeToken($token_seguridad)){
        if($this->executeVerificar($email)){
            return sfView::SUCCESS;
       }else{
            return sfView::ERROR;
        }
    }else{
        return sfView::ERROR;
    }


}

public function executeRecuperar_password(sfWebRequest $request)
{

}

/*
  Metodo que devuelve true o false segun corresponda
 -verifica si el codigo enviado es igual a algun token de seguridad
 */
public function executeToken($palabra_md5)
{
  $codigo= "esferadigital";
  $codigo = md5($codigo);
  if($codigo==$palabra_md5){
      return true;
  }else{
      return false;
  }
}

/* Este metodo devuelve true o false
   si encuentra un un email igual en la bd
*/

public function executeVerificar($email)
{
        $email = strtolower(trim($email));
        $email = '%'.$email.'%';
        $criterio = new Criteria();
        $criterio->add(UsuarioPeer::EMAIL, $email,Criteria::LIKE);
        //verificado si la hay resultados para mi busqueda
        if(UsuarioPeer::doCount($criterio)>0){
            return false;
        }else{
            return  true;
        }
}


}
